home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / tools / ask / source_ / devcheck.s < prev    next >
Text File  |  1998-10-01  |  2KB  |  74 lines

  1. *--------------------------------------------------------------------
  2. * デバイス存在チェック関数
  3. *--------------------------------------------------------------------
  4. * この関数では厳密にデバイスドライバの存在は識別出来ないので注意。
  5.  
  6.     .include    iocscall.mac
  7.  
  8.     .text
  9.     .even
  10.     .xref    GetNulPoint
  11.  
  12. *--------------------------------------------------------------------
  13.  
  14.     .xdef    _DevCheck
  15. _DevCheck:
  16. * 指定のデバイスドライバが存在するかどうかを調べる(キャラクターデバイス専用)
  17. * 4(sp) <- 調べるデバイス名
  18. *          $00で終わる文字列でも8文字のデバイス名そのものでもどちらでも良い
  19. * リターン値
  20. *    d0.l:存在しているかどうか    a0:デバイスヘッダーアドレス
  21. *     = $00 ... 存在していない     不変
  22. *     = $ff ... 存在している         見つけたデバイスドライバーのヘッダーアドレス
  23.     move.l    4(sp),d0
  24.     movem.l    d7/a1-a4,-(sp)
  25.     move.l    d0,a2
  26.     *
  27.     * 比較するデバイス名の長さを得る -> d7.w
  28.     move.l    a2,a1
  29.     moveq.l    #-1,d7        * 名前比較のdbraのため
  30. @@:    move.b    (a1)+,d0
  31.     beq    @f
  32.     cmp.b    #' ',d0
  33.     beq    @f
  34.     addq.w    #1,d7
  35.     cmp.w    #8-1,d7
  36.     bcs    @b
  37. @@:    *
  38.     clr.l    a1
  39.     IOCS    _B_SUPER    * super visor mode
  40.     move.l    d0,-(sp)
  41.     *
  42.     bsr    GetNulPoint    * -> a1(NUL)
  43.     *
  44. @@:    lea    14(a1),a3    * デバイス名
  45.     move.l    a2,a4
  46.     move.w    d7,d0
  47. 1:    cmp.b    (a4)+,(a3)+
  48.     dbne    d0,1b
  49.     beq    FoundDev    * 一致
  50. NextDev:            * 不一致
  51.     move.l    (a1),a1        * 次へ
  52.     cmp.l    #-1,a1
  53.     bne    @b
  54.     * 見つからなかった
  55.     moveq.l    #0,d7        * a0は不変
  56.     bra.s    @f
  57.     *
  58. FoundDev:            * 見つかった
  59.     move.l    a1,a0        * デバイスヘッダーアドレス
  60.     st.b    d7        * 見つかった
  61. @@:    *
  62.     move.l    (sp)+,d0
  63.     bmi    @f        * 元からsuper visorであった
  64.     move.l    d0,a1
  65.     IOCS    _B_SUPER    * user mode
  66. @@:    *
  67.     moveq.l    #0,d0        * for .b = .l
  68.     move.b    d7,d0
  69.     movem.l    (sp)+,d7/a1-a4
  70.     rts
  71.  
  72. *--------------------------------------------------------------------
  73.     .end
  74.